package com.scy.java.object.stad;

public class A {
    int v1 = 1;
    static  int v2 = 2;
    static {
        v2+=2;
        System.out.println("A类静态代码块");
        System.out.println("静态变量v2="+v2);
    }
    {
        System.out.println("A类构造代码块");
    }
    public A(){
        v1+=10;
        System.out.println("成员变量V1 = "+v1);
        System.out.println("A类构造方法");
    }

    public static void main(String[] args) {
        //第一次创建对象
        new B();
        /**
         * 第一次创建对象
         * 1、加载父类，为父类的静态资源分配内存
         * 2、执行父类静态代码块和静态变量的赋值运算
         * 3、加载子类，为子类的静态资源分配内存
         * 4、执行子类静态代码块和静态变量的赋值运算
         * 5、创建父类对象，为父类非静态资源分配内存
         * 6、执行父类的构造代码块和成员变量的赋值运算
         * 7、执行父类构造方法
         * 8、创建子类对象，为父类非静态资源分配内存
         * 9、执行子类的构造代码块和成员变量的赋值运算
         * 10、执行子类构造方法
         *
         */
        System.out.println("-------------");
        //第二次创建对象
        new B();
        /**
         * 5、创建父类对象，为父类非静态资源分配内存
         * 6、执行父类的构造代码块和成员变量的赋值运算
         *7、执行父类构造方法
         * 8、创建子类对象，为父类非静态资源分配内存
         * 9、执行子类的构造代码块和成员变量的赋值运算
         * 10、执行子类构造方法
         */



    }
}
class B extends A{
    int v3 = 3;
    static  int v4 = 4;
    static {

        System.out.println("B类静态代码块");
        System.out.println("静态变量v4="+v4);
    }
    {
        v3+=3;
        System.out.println("B类构造代码块");
        System.out.println("成员变量v3= "+v3);
    }
    public B(){

        System.out.println("B类构造方法");
    }

}
